package com.junzhiit.nengji.dao;

import java.util.Iterator;
import java.util.List;

import com.bainaeco.framework.base.dao.BaseDAO;
import com.junzhiit.nengji.bo.GoodsBO;
import com.junzhiit.nengji.bo.GoodsListBO;
import com.junzhiit.nengji.bo.ShopBO;
import com.junzhiit.nengji.bo.ShopDetailsBO;
import com.junzhiit.nengji.bo.ShopInfoBO;
import com.junzhiit.nengji.bo.ShopWithinDistanceBO;
import com.junzhiit.nengji.model.Shop;

public interface ShopDAO extends BaseDAO<Shop> {

	/**
	 * 
	 * TODO 检查是否已存在门店
	 * 
	 * @author PeterMo
	 * @time 2018年1月18日 下午2:42:43
	 * @return int
	 */
	public int checkMainAccount(String mainAccounId);

	/**
	 * 
	 * TODO 查询所有门店列表
	 * 
	 * @author PeterMo
	 * @time 2018年1月18日 下午2:43:32
	 * @return List<ShopBO>
	 */
	public List<ShopBO> findAll(Shop shop, int pageNumber, int maxPageRow);
	
	/**
	 * TODO  按照店铺名称模糊查询店铺信息
	 * @author DlamLiu
	 * @time 2018年7月4日 上午11:49:13
	 * @return List<ShopBO>
	 * 
	 */
	public List<ShopDetailsBO> findShops(String shopName);

	
	/**
	 * 
	 * TODO 查询所有门店列表精简数据
	 * 
	 * @author DlamLiu
	 * @time 2018年6月14日 下午17:43:32
	 * @return List<ShopBO>
	 */
	public List<ShopBO> findConstrictAll();
	/**
	 * 
	 * TODO 分页统计
	 * 
	 * @author PeterMo
	 * @time 2018年1月18日 下午2:43:53
	 * @return int
	 */
	public int getTotalCount(Shop shop);

	/**
	 * 
	 * TODO 根据ID查询商户信息
	 * 
	 * @author PeterMo
	 * @time 2018年1月18日 下午8:24:15
	 * @return ShopBO
	 */
	public ShopBO getShopById(String id);

	/**
	 * 
	 * TODO 查询门店下拉框
	 * 
	 * @author PeterMo
	 * @time 2018年1月24日 下午1:45:22
	 * @return List<Shop>
	 */
	public List<Shop> getShopList();
	
	/**
	 * 
	 * TODO
	 * @author FebRosy
	 * @time 2018年3月5日 下午2:16:12
	 * @return void
	 */
	public ShopInfoBO findById(String id);

	/**
	 * 
	 * TODO api 根据ID查询商户信息
	 * 
	 * @author Qjen
	 * @time 2018年2月23日 下午1:32:32
	 * @return ShopBO
	 *
	 */
	public ShopBO findShopById(String id);
	
	public int checkShop(String shopId);
	
	/**
	 * 
	 * TODO 查询最大收藏数
	 * @author PeterMo
	 * @time 2018年2月26日 下午3:02:23
	 * @return int
	 */
	public int checkMaxCollections(String shopId);
	
	/**
	 * 
	 * TODO 查询所有商户的数量
	 * @author Zaki
	 * @time 2018年4月10日 上午10:06:33
	 * @return int
	 */
	public int getCountByShop();
	
	/**
	 * 
	 * TODO 查询所有商户待审核的数量
	 * @author Zaki
	 * @time 2018年4月10日 上午11:53:09
	 * @return int
	 */
	public int getCountByShopApproval();
	
	/**
	 * 
	 * TODO 获取所有未到期商户的基本信息
	 * @author Zaki
	 * @time 2018年4月18日 下午5:15:47
	 * @return List<Date>
	 */
	public List<Shop> getAllShop();
	
	/**
	 * 
	 * TODO 查询所有的待审核商品的店铺(除去连锁品牌下的商户)
	 * 
	 * @author Qjen
	 * @time 2018年5月17日 下午1:40:17
	 * @return List<Shop>
	 *
	 */
	public List<Shop> getGoodsAuditShopSelect();

	/**
	 * 
	 * TODO 获取所有即将到期的并且没发送短信的商户基本信息
	 * @author Zaki
	 * @time 2018年5月16日 下午5:25:43
	 * @return List<Shop>
	 */
	public List<Shop> getSoonExpireShop();
	
	/**
	 * 
	 * TODO 获取店铺列表
	 * 
	 * @author Qjen
	 * @time 2018年5月18日 下午4:14:09
	 * @return List<Shop>
	 *
	 */
	public List<Shop> getShopList(Integer type,String chainId);
	
	
	/**
	 * 
	 * TODO 获取店铺集合
	 * @author FEB
	 * @time 2018年5月24日 上午9:55:16
	 * @return List<Shop>
	 */
	public List<ShopBO> findShopList(Shop shop);
	
	/**
	 * TODO 获取所有已经到期的并且没发送提醒短信的商户基本信息
	 * @author Zaki
	 * @time 2018年5月16日 下午5:25:43
	 * @return List<Shop>
	 */
	public List<Shop> getExpireShop();
	
	/**
	 * 
	 * TODO 根据店铺ID查找主体账号
	 * @author Zaki
	 * @time 2018年5月25日 上午11:04:32
	 * @return String
	 */
	public String getMainAccountPhone(String shopId);
	
	/**
	 * 
	 * TODO 根据用户ID店铺
	 * @author PeterMo
	 * @time 2018年6月4日 下午5:02:13
	 * @return Shop
	 */
	public List<Shop> getRecommendByUserId(String userId,int pageNumber, int maxPageRow);
	
	/**
	 * 
	 * TODO 根据用户ID店铺 统计数量
	 * @author PeterMo
	 * @time 2018年6月4日 下午5:44:57
	 * @return int
	 */
	public int getRecommendTotalCount(String userId);
	
	/**
	 * 
	 * TODO 获取店铺集合
	 * @author FEB
	 * @time 2018年6月7日 下午3:35:58
	 * @return List<Shop>
	 */
	public List<ShopBO> findListByChain(String systemUserId,Shop shop, int pageNumber, int maxPageRow);
	
	/**
	 * 
	 * TODO 获取店铺数量
	 * @author FEB
	 * @time 2018年6月7日 下午8:11:41
	 * @return int
	 */
	public int getTotalCountByChain(String systemUserId,Shop shop);
	
	/**
	 * 
	 * TODO 根据店铺Id获取店铺商品列表
	 * @author Harry
	 * @time 2018年7月7日 下午6:12:14
	 * @return List<Goods>
	 */
	public List<GoodsBO> findGoodsListByShopId(GoodsListBO glb, Integer pageNumber, Integer maxPageRow);
	
	/**
	 * 
	 * TODO 根据店铺Id获取店铺商品数量
	 * @author Harry
	 * @time 2018年7月8日 下午9:51:08
	 * @return int
	 */
	public int getTotalCountByShopId(GoodsListBO glb);
	
	/**
	 * TODO 查询指定范围内的店铺
	 * @author Dlam
	 * @time 2018年8月10日 上午11:49:59
	 * @return List<ShopWithinDistanceBO>
	 * 
	 */
	public List<ShopWithinDistanceBO> withinDistanceShop(Double lat,Double log,Double distance);
	
	/**
	 * 	根据时间条件查询最高200条店铺记录
	 * @param time yyyy-MM-dd hh:mm:ss
	 * @return List<ShopTO>
	 */
	public List<Shop> findTop200ByTime(String time);
	
	/** TODO 周边连锁品牌店铺
	 * @author Dlam
	 * @time 2018年8月10日 上午11:50:57
	 * @return ShopBO
	 * 
	 */
	public ShopBO aroundShop(Double lat,Double log,String chainId);
	
	/**
	 * TODO 连锁品牌在市区内所有的店铺
	 * @author Dlam
	 * @time 2018年8月10日 上午11:50:57
	 * @return List<ShopBO>
	 * 
	 */
	public List<ShopBO> chainShop(Double lat,Double log,String chainId,String areaCityId);
	
	/**
	 * 
	 * TODO 修改店铺是否开启分销
	 * @author PeterMo
	 * @time 2018年7月21日 下午2:46:02
	 * @return boolean
	 */
	public boolean updateIsOpenSell();
	
	/**
	 * 
	 * TODO 修改店铺是否开启返利
	 * @author PeterMo
	 * @time 2018年7月21日 下午2:46:06
	 * @return boolean
	 */
	public boolean updateIsOpenRebate();
	
	/**
	 * 
	 * TODO
	 * @author FEB
	 * @time 2018年7月23日 下午2:02:49
	 * @return List<Shop>
	 */
	public List<Shop> getProgramShop();
	/**
	 * 
	 * TODO 获取品牌下所有店铺列表(下拉框)
	 * @author Harry
	 * @time 2018年8月2日 下午5:44:18
	 * @return List<Shop>
	 */
	public List<Shop> getShopList(String chainId); 
	
	
	public List<Shop> getShop(Iterator<String> shopIdList);
	
	/**
	 * 
	 * TODO 获取商户列表(模块店铺管理,区分平台)
	 * @auhor Harry
	 * @time 2018年8月29日下午5:15:49
	 * @return List<Shop>
	 */
	public List<Shop> getList(ShopBO sb,int pageNumber, int maxPageRow);
	
	/**
	 * 
	 * TODO 获取商户列表(模块店铺管理,区分平台)总数
	 * @auhor Harry
	 * @time 2018年8月29日下午5:31:26
	 * @return Integer
	 */
	public Integer getListCount(ShopBO sb);
	
	/**
	 * 
	 * TODO 根据行业ID查找该行业下商家
	 * @author Zaki
	 * @time 2018年10月10日 下午1:57:45
	 * @return List<Shop>
	 */
	public List<Shop> getShopByIndustry(String industryId);
	
}
